﻿// 0929train02.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <limits>
#include <iomanip>
#include <numeric>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <deque>

using namespace std;

/*
 用 L 表示向左
 R 表示向右翻转
 F 表示向前翻转
 B 表示向后翻转
 A 表示逆时针旋转 90
 C 表示顺时针旋转 90 度

 123456
 12
 34
 56
 左右前后上下
 L 563421
 R 653412
 F 125643
 B 126534
 A 431256
 C 342156
 */
class Solution01
{
public:
    string getNewStr(char dir_ch, string&exec_str)
    {
        int size = exec_str.size();
        vector<int>num_vec = { 0 };
        for (auto&ch:exec_str)
        {
            num_vec.push_back(ch - '0');
        }

        vector<int>origin_v = num_vec;
        if (dir_ch=='L')
        {
            //123456
            //563421
            num_vec[1] = origin_v[5];
            num_vec[2] = origin_v[6];
            num_vec[5] = origin_v[2];
            num_vec[6] = origin_v[1];
        }
        else if (dir_ch == 'R')
        {
            //123456
            //653412
            num_vec[1] = origin_v[6];
            num_vec[2] = origin_v[5];
            num_vec[5] = origin_v[1];
            num_vec[6] = origin_v[2];
        }
        else if (dir_ch=='F')
        {
            //123456
            //125643
            num_vec[3] = origin_v[5];
            num_vec[4] = origin_v[6];
            num_vec[5] = origin_v[4];
            num_vec[6] = origin_v[3];
        }
        else if (dir_ch=='B')
        {
	        //123456
            //126534
            num_vec[3] = origin_v[6];
            num_vec[4] = origin_v[5];
            num_vec[5] = origin_v[3];
            num_vec[6] = origin_v[4];
        }
        else if (dir_ch=='A')
        {
            //123456
            //431256
            num_vec[1] = origin_v[4];
            num_vec[2] = origin_v[3];
            num_vec[3] = origin_v[1];
            num_vec[4] = origin_v[2];
        }
        else if (dir_ch=='C')
        {
            //123456
	        //342156
            num_vec[1] = origin_v[3];
            num_vec[2] = origin_v[4];
            num_vec[3] = origin_v[2];
            num_vec[4] = origin_v[1];
        }

        string result;
        int v_size = num_vec.size();
        for (int i=1; i< v_size; i++)
        {
            result += to_string(num_vec[i]);
        }
        return result;
	    //getNewStr
    }

    Solution01(string&dir_str)
    {
        string curr_str = "123456";
        for (auto&ch:dir_str)
        {
            string new_str = getNewStr(ch, curr_str);
            curr_str = new_str;
        }
        cout << curr_str;
	    //Solution01
    }
};


/*
一群大雁往南飞，给定一个字符串记录地面上的游客听到的大雁叫声，请给出叫声最少由几只大雁发出。
具体的：
1. 大雁发出的完整叫声为 "quack"，因为有多只大雁同一时间嘎嘎作响，
所以字符串中可能会混合多个"quack"。
2. 大雁会依次完整发出"quack"，
即字符串中 "q" ,"u", "a", "c", "k" 这 5 个字母按顺序完整存在才能计数为一只大雁
如果不完整或者没有按顺序则不予计数。
3. 如果字符串不是由"q" ,"u", "a", "c", "k"字符组合而成，或者没有找到一只大雁，请返回-1

输入
一个字符串，包含大雁 quack 的叫声。1 <= 字符串长度 <= 1000
字符串中的字符只有 "q" ,"u", "a", "c", "k"

输出
大雁的数量

输入
quackquack
输出
1
 */
class Solution02
{
public:
    Solution02(string&origin_str)
    {
        //map记每个字符的索引
        //count_v记每个字符频率
        //ch!='q' 查看count_v[index-1]是否小于当前
        //ch=='q'考虑复用，查看count_v[count_size-1]是否大于0
        //quack
        unordered_map<char, int>char_map = {
        	{'q',0},{'u',1},{'a',2},{'c',3},{'k',4}
        };

        vector<int>count_v(5, 0);

        bool is_error = false;
        for (auto&curr_ch:origin_str)
        {
            if (char_map.count(curr_ch)==0)
            {
                is_error = true;
                break;
            }

            int curr_i = char_map.at(curr_ch);
            if (curr_ch!='q')
            {
                int prev_i = curr_i - 1;
                if (count_v[prev_i] < count_v[curr_i])
                {
                    is_error = true;
                    break;
                }
            }
            else
            {
	            //curr_ch=='q'
                int k_i = char_map.at('k');
                if (count_v[k_i]>0)
                {
	                //抓来复用，整体减一
                    int count_v_size = count_v.size();
                    for (int i=0; i<count_v_size; i++)
                    {
                        count_v[i] -= 1;
                    }
                }
                //else
            }
            count_v[curr_i] += 1;
	        //for---
        }

        if (is_error)
        {
            cout << -1;
            return;
        }

        //扫一遍count_v，计算每个字符数量是否相等
        int same_count = count_v[0];
        int count_v_size = count_v.size();
        for (int i=1; i<count_v_size; i++)
        {
	        if (count_v[i]!=same_count)
	        {
                cout << -1;
                return;
	        }
        }
        cout << same_count;
	    //Solution02
    }
};


int main()
{
	{
        string input;
        getline(cin, input);
        Solution02 solu(input);


        return 0;
	}
    string input;
    getline(cin, input);
    Solution01 solu(input);
}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件，或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来，若要再次打开此项目，请转到“文件”>“打开”>“项目”并选择 .sln 文件
